package testJdk.commonUse.fileFromResources;

import cn.hutool.core.io.FileUtil;
import org.apache.commons.io.IOUtils;
import org.junit.Test;
import org.springframework.core.io.ClassPathResource;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;

/**
 * @version 1.0.0
 * Created by cyd on 2024-08-15 15:40:49
 * @ClassName : testJdk.commonUse.fileFromResources.Test
 * @Description : 加载文件，加载resources文件夹下的文件
 */
public class TestFileFromResources {

    /**
     * 获取成file
     */
    @Test
    public void test01() throws UnsupportedEncodingException {
        // 获取resources下的文件
        String resourcePath = getClass().getClassLoader().getResource("data/info").getPath();

        // 如果路径中带有中文会被URLEncoder,因此这里需要解码
        String filePath = URLDecoder.decode(resourcePath, "UTF-8");
        File file = new File(filePath);
        System.out.println(file);
        System.out.println("-----------------------------------------");

        // 读取文件成字符串
        byte[] bytes = FileUtil.readBytes(file);
        String data = new String(bytes, StandardCharsets.UTF_8);
        System.out.println(data);
    }

    /**
     * 获取成InputStream
     */
    @Test
    public void test02() throws IOException {
        // 获取resources下的文件
        InputStream resourceAsStream = getClass().getClassLoader().getResourceAsStream("data/info");
        String string = IOUtils.toString(resourceAsStream, StandardCharsets.UTF_8);
        System.out.println(string);
    }

    /**
     * 通过ClassPathResource类获取，可以获取jar包
     * 建议SpringBoot中使用
     * springboot项目中需要使用此种方法，因为jar包中没有一个实际的路径存放文件
     */
    @Test
    public void test03() throws IOException, ClassNotFoundException {
        // 获取resources下的文件
        ClassPathResource classPathResource = new ClassPathResource("com/example/demo/config/QuartzConfig.class");
        InputStream inputStream = classPathResource.getInputStream();
        String string = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
        System.out.println(string);
    }


}
